/*
 * ProtocoloCliente.h
 *
 * Author: Grupo Nro.
 */

#ifndef PROTOCOLOCLIENTE_H_
#define PROTOCOLOCLIENTE_H_

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "ProtocoloConstantes.h"
#include "Protocolo.h"
#include "Utils.h"
#include "ComunicacionException.h"
#include "iostream"

using std::string;
using std::cerr;

class ProtocoloCliente {
private:
	static string formatearLongitud(string & longitud);
	static string armarPrimerMensaje(string & codigoMensaje, long longitud);
	static bool enviarMensaje(int sockfd, string & codigoMensaje,
			string & mensaje);
public:
	ProtocoloCliente();
	virtual ~ProtocoloCliente();
	static bool send_opcionSeleccionadaInicial(int sockfd, bool creaPartida);
	static string recv_campaniasExistentes(int sockfd);
	static bool send_campaniaSeleccionadaYnombrePartida(int sockfd,
			string & idCampania, string & nombrePartida);
	static string recv_partidasExistentesNoComenzadas(int sockfd);
	static bool send_partidaSeleccionada(int sockfd, string & idPartida);
	static string recv_partidaListaParaComenzar(int sockfd);
	static bool send_comenzarPartida(int sockfd, bool comenzar, string & idPartida);
	static string recv_partidaIniciada(int sockfd);
	static string recv_dimensionEscenario(int sockfd);
	static bool send_coordenadasEscenarioInteresa(int sockfd, long filaDesde,
			long filaHasta, long columnaDesde, long columnaHasta);
	static string recv_escenarioInteresJugador(int sockfd);
	static string recv_puntajeYjugador(int sockfd);
	static string recv_finPartida(int sockfd);
	static bool recv_explosionBomba(int sockfd);
	static string recv_bombermanDestruido(int sockfd);
	static bool recv_zombieDestruido(int sockfd);
	static bool recv_bombaLanzadaPlanta(int sockfd);
	static bool send_bombaGeneradaBomberman(int sockfd, long fila,
			long columna);
	static string recv_bombaGeneradaBomberman(int sockfd);
	static string recv_nuevoBomberman(int sockfd);
	static bool send_movimientoJugador(int sockfd, string movimiento);
	static bool send_requestForUpdates(int sockfd);
	static string recv_requestForUpdates(int sockfd);
	static bool send_update(int sockfd, std::string& update);
	static string recv_updates(int sockfd);
	static string recv_scenario(int sockfd);

	//TODO Eliminar es un mensaje de prueba
	static string recv_mensajeBienvenida(int sockfd);
	static bool send_mensajeAgradecimiento(int sockfd);
	//FIN TODO
};

#endif /* PROTOCOLOCLIENTE_H_ */
